﻿#ifndef _MAP_H_
#define _MAP_H_



struct Node
{
    uint key;
    void *value;
    struct Node *next;
};

struct Map
{
    Node **buckets;
    int size;
};

// 定义迭代器结构体
typedef struct Iterator
{
    Map *map;
    int bucket_idx;
    Node *node;
} Iterator;

// 创建一个新的 Map
Map *CreateMap(int size);

// 删除一个 Map
void DeleteMap(Map *map);

// 添加键值对
void Put(Map *map, uint key, void *value);

// 获取键对应的值，如果不存在则返回 NULL
void *Get(Map *map, uint key);

// 创建一个新的迭代器
Iterator *CreateIterator(Map *map);

// 删除一个迭代器
void DeleteIterator(Iterator *it);

// 将迭代器移动到下一个键值对，并返回该键值对的指针
Node *GetNextNode(Iterator *it);

// 创建一个新的节点
Node *createNode(uint key, void *value);

// 删除一个节点
void deleteNode(Node *node);

// 计算哈希值
int hash(uint key, int size);

#endif